package demo.springcloud.handle;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * @author yexi
 */
@Slf4j
public class DefaultListHandler implements ListHandler {

    @Override
    public <T> List<T> handle(String returnMsg, String url, Class<T> clazz) {
        List<T> voList;
        JSONObject finalMsg = JSON.parseObject(returnMsg);

        boolean success = finalMsg.get("success") != null && Boolean.parseBoolean(finalMsg.get("success").toString());
        Object obj = finalMsg.get("obj");
        if (success) {
            voList = (obj == null || obj.equals("") || clazz == null) ? new ArrayList<>() : JSON.parseArray(JSON.toJSONString(obj), clazz);
        } else {
            log.error("远程调用微服务成功: {}，但远程服务处理失败，本次远程调用停止，请排查原因", url);
            Object errorMsg = finalMsg.get("msg");
            log.error("造成本次微服务处理失败的原因:{}", errorMsg);
            log.error("请求失败的信息:{}", finalMsg.get("attributes"));
            throw new RuntimeException("远程调用微服务成功，但微服务返回了处理失败: " + url + "，本次远程调用停止，请排查原因");
        }
        return voList;
    }
}
